#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
HQ-Reader - 高效CSV/Parquet文件阅读器
应用程序入口模块
"""

import os
import sys
import logging
from pathlib import Path
from dotenv import load_dotenv

# 在导入任何库之前设置matplotlib缓存目录
# 这样可以避免在应用启动时显示"Matplotlib is building the font cache"消息
try:
    matplotlib_cache_dir = Path(__file__).parent / "assets" / "matplotlib_cache"
    if matplotlib_cache_dir.exists():
        os.environ['MPLCONFIGDIR'] = str(matplotlib_cache_dir)
except Exception:
    pass

# 在导入PySide6模块前先检查兼容性
try:
    from utils.pyside_compat import check_pyside_compatibility
    check_pyside_compatibility()
except ImportError:
    # 如果无法导入兼容性检查模块，直接继续
    print("警告: 无法导入PySide6兼容性检查模块，将尝试直接运行")

# 预先初始化matplotlib，避免在UI启动后出现字体缓存构建消息
try:
    from utils.matplotlib_init import init_matplotlib
    init_matplotlib()
except ImportError:
    print("警告: 无法导入matplotlib初始化模块")

from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QTranslator, QLocale

from ui.main_window import MainWindow
from config.constants import APP_NAME, LOG_LEVEL, LOG_FORMAT, LOG_FILE
from config.settings import Settings
from core.i18n import i18n


def setup_logging():
    """配置日志系统"""
    # 确保日志目录存在
    log_path = Path(LOG_FILE).parent
    os.makedirs(log_path, exist_ok=True)
    
    # 配置日志级别
    level = getattr(logging, LOG_LEVEL.upper(), logging.INFO)
    
    # 配置日志格式
    logging.basicConfig(
        level=level,
        format=LOG_FORMAT,
        handlers=[
            logging.FileHandler(LOG_FILE),
            logging.StreamHandler(sys.stdout)
        ]
    )
    
    # 初始日志
    logger = logging.getLogger(APP_NAME)
    logger.info(f"启动 {APP_NAME} 应用程序")
    return logger


def main():
    """应用程序主函数"""
    # 加载环境变量
    load_dotenv()
    
    # 设置日志
    logger = setup_logging()
    
    try:
        # 初始化配置
        settings = Settings()
        
        # 创建应用程序
        app = QApplication(sys.argv)
        app.setApplicationName(APP_NAME)
        
        # 初始化国际化
        language = settings.get("language", "auto")
        i18n.set_language(language)
        
        # 加载翻译（保留原有的Qt翻译系统）
        translator = QTranslator()
        if translator.load(QLocale.system(), "hqreader", "_", "./translations"):
            app.installTranslator(translator)
        
        # 应用主题
        # theme = settings.get("theme", "dark")
        # apply_stylesheet(app, theme=theme)
        
        # 创建主窗口
        window = MainWindow()
        
        # 检查命令行参数，如果有文件路径则直接打开
        if len(sys.argv) > 1:
            file_path = sys.argv[1]
            if os.path.exists(file_path) and file_path.lower().endswith(('.csv', '.parquet', '.pq')):
                logger.info(f"通过命令行参数打开文件: {file_path}")
                # 延迟加载文件，确保窗口完全初始化
                from PySide6.QtCore import QTimer
                QTimer.singleShot(100, lambda: window.open_file_directly(file_path))
        
        window.show()
        
        # 运行应用程序循环
        sys.exit(app.exec())
        
    except Exception as e:
        logger.error(f"应用程序启动失败: {str(e)}", exc_info=True)
        sys.exit(1)


if __name__ == "__main__":
    main()
